#include "bsp.h"

#include <stdio.h>
#include <string.h>

extern SPI_HandleTypeDef hspi2;
extern UART_HandleTypeDef huart2;

int bsp_led(uint8_t state)
{
	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, state ? GPIO_PIN_RESET : GPIO_PIN_SET);
	return 0;
}

int bsp_asw(uint8_t sw_num, uint8_t sw_state)
{
	if (sw_num == 1) {
		HAL_GPIO_WritePin(VDD1_EN_GPIO_Port, VDD1_EN_Pin,
				  sw_state ? GPIO_PIN_SET : GPIO_PIN_RESET);
		return 0;
	}

	if (sw_num == 2) {
		HAL_GPIO_WritePin(VDD2_EN_GPIO_Port, VDD2_EN_Pin,
				  sw_state ? GPIO_PIN_SET : GPIO_PIN_RESET);
		return 0;
	}

	return 1;
}

int bsp_max5400(uint8_t dev_num, uint8_t value)
{
	if (dev_num & 0x1) {
		HAL_GPIO_WritePin(CS_MAX5400_VDD1_GPIO_Port, CS_MAX5400_VDD1_Pin,
				  GPIO_PIN_RESET);
	}

	if (dev_num & 0x2) {
		HAL_GPIO_WritePin(CS_MAX5400_VDD2_GPIO_Port, CS_MAX5400_VDD2_Pin,
				  GPIO_PIN_RESET);
	}

	HAL_SPI_Transmit(&hspi2, &value, 1, 0xfff);

	HAL_GPIO_WritePin(CS_MAX5400_VDD2_GPIO_Port, CS_MAX5400_VDD1_Pin | CS_MAX5400_VDD2_Pin, GPIO_PIN_SET);

	return 0;
}

extern uint8_t UartIRQFlag;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	//app_MsgCB();
	UartIRQFlag = 1;
}

void USER_UART_IRQHandler(UART_HandleTypeDef *huart)
{
    if(USART2 == huart->Instance)                                   //判断是否是串口1（！此处应写(huart->Instance == USART1)
    {
        if(RESET != __HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE))   //判断是否是空闲中断
        {
            __HAL_UART_CLEAR_IDLEFLAG(&huart2);                     //清楚空闲中断标志（否则会一直不断进入中断）
            app_dprintf("\r\nUART2 Idle IQR Detected\r\n");
            USER_UART_IDLECallback(huart);                          //调用中断处理函数
        }
    }
}

extern uint8_t uartRxBuffer[255];                                             //声明外部变量 
extern DMA_HandleTypeDef hdma_usart2_rx;

void USER_UART_IDLECallback(UART_HandleTypeDef *huart)
{
    HAL_UART_DMAStop(&huart2);                                                     //停止本次DMA传输
    UartIRQFlag = 1;
    
    
}
